library(pracma)
A=matrix(c(0,1,2,1,0,4,2,4,0),nrow=3,byrow=T) #输入关于变量X的二次型的系数
print(A)

C1=matrix(c(1,1,0,1,-1,0,0,0,1),nrow=3,byrow=T) #X=C1Y
B1=t(C1)%*%A%*%C1 #得到关于变量Y的二次型的系数
print(B1)

C2=matrix(c(1,0,3,0,1,1,0,0,1),nrow=3,byrow=T) #Z=C2Y
C2inv=solve(C2) #求逆矩阵
B2=t(C2inv)%*%B1%*%C2inv #得到关于变量Z的二次型的系数
print(B2)

C3=matrix(c(sqrt(2),0,0,0,sqrt(2),0,0,0,sqrt(16)),nrow=3,byrow=T) #W=C3Z
C3inv=solve(C3) #求逆矩阵
B3=t(C3inv)%*%B2%*%C3inv #得到关于变量W的二次型的系数
print(B3)

C4=matrix(c(1,0,0,0,1i,0,0,0,1i),nrow=3,byrow=T) #U=C4W
C4inv=solve(C4) #求逆矩阵
B4=t(C4inv)%*%B3%*%C4inv #得到关于变量U的二次型的系数
print(B4)

C=C1%*%C2inv%*%C3inv%*%C4inv #X=CU
print(C)
B=t(C)%*%A%*%C
print(B) #同样得到关于变量U的二次型的系数


# Q1=matrix(c(1,0,0,1,1,0,0,0,1),nrow=3,byrow=T) #第1次列初等变换
# Q2=matrix(c(1,-1/2,0,0,1,0,0,0,1),nrow=3,byrow=T) #第2次列初等变换
# Q3=matrix(c(1,0,-3,0,1,0,0,0,1),nrow=3,byrow=T) #第3次列初等变换
# Q4=matrix(c(1,0,0,0,1,2,0,0,1),nrow=3,byrow=T) #第4次列初等变换
# myC=Q1%*%Q2%*%Q3%*%Q4 #将四个初等矩阵乘起来
# print(myC)
# A=matrix(c(0,1,2,1,0,4,2,4,0),nrow=3,byrow=T)
# B=t(myC)%*%A%*%myC #验证合同变换的结果
# print(B)
